package com.cskaoyan.controller.admin;

import com.cskaoyan.bean.*;
import com.cskaoyan.bean.bo.admin.password.UpdatePasswordBO;
import com.cskaoyan.bean.common.BasePageInfo;
import com.cskaoyan.bean.common.BaseRespVo;
import com.cskaoyan.bean.common.CommonData;
import com.cskaoyan.bean.vo.admin.user.Dashboard;
import com.cskaoyan.service.admin.AdminService;
import com.cskaoyan.service.admin.UserService;
import com.cskaoyan.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @ClassName HomeController
 * @Description TODO 李博 用户管理功能
 * @Author by Lester
 * @Date 2022/11/19 15:48
 * @Version 1.0
 */
@RestController
@RequestMapping("/admin")
public class UserManagementController {

    @Autowired
    AdminService adminService;

    @Autowired
    UserService userService;

    // 权限重定向URI
    @RequestMapping("noAuthc")
    public BaseRespVo noAuthc(){
        return BaseRespVo.unAuthc();
    }

    // 在首页显示出用户数量、商品数量、货品数量、订单数量
    @GetMapping("dashboard")
    public BaseRespVo<Dashboard> dashboard() {
        Dashboard result = adminService.queryDashboard();
        return BaseRespVo.ok(result);
    }

    // 修改密码
    @PostMapping("/profile/password")
    public BaseRespVo updatePassword(@RequestBody UpdatePasswordBO password) {
        adminService.updatePassword(password);
        return BaseRespVo.ok();
    }

    // TODO 会员管理
    // 在页面获取用户信息，查找会员用户的详情
    // list?page=1&limit=20&username=user&mobile=123&sort=add_time&order=desc
    @GetMapping("/user/list")
    public BaseRespVo vipDataManage(BasePageInfo basePageInfo, String username, String mobile) {
        CommonData<MarketUser> data = userService.list(basePageInfo, username, mobile);
        return BaseRespVo.ok(data);
    }

    // 根据id查询用户信息
    @GetMapping("/user/detail")
    public BaseRespVo<MarketUser> queryUser(String id) {
        Integer valueId = null;
        try {
            valueId = Integer.valueOf(id);
        } catch (NumberFormatException e) {
            // e.printStackTrace();
            return BaseRespVo.invalidParameter();
        }
        MarketUser data = userService.queryUserById(valueId);
        return BaseRespVo.ok(data);
    }

    // 修改用户信息
    @PostMapping("/user/update")
    public BaseRespVo updateUser(@RequestBody MarketUser user) {
        userService.updateUser(user);
        return BaseRespVo.ok(1);
    }

    // TODO 收货地址
    // 在页面获取用户收获地址信息，查找用户的地址详情
    @GetMapping("/address/list")
    public BaseRespVo getAddressData(BasePageInfo basePageInfo, String name, String userId) {
        Integer valueUserId = null;
        try {
            // 需要判空不然直接把""传进去进行查询数据库了
            if (!StringUtil.isEmpty(userId)) {
                valueUserId = Integer.valueOf(userId);
            }
        } catch (NumberFormatException e) {
            // e.printStackTrace();
            return BaseRespVo.invalidParameter();
        }
        CommonData<MarketAddress> addressData = userService.addressList(basePageInfo, name, valueUserId);
        return BaseRespVo.ok(addressData);
    }

    // TODO 会员收藏
    // 在页面获取用户收藏商品信息，查找用户收藏信息
    // list?page=1&limit=20&userId=1&valueId=2&sort=add_time&order=desc
    @GetMapping("/collect/list")
    public BaseRespVo getCollectData(BasePageInfo basePageInfo, String userId, String valueId) {
        Integer valueUserId = null;
        Integer valueId2 = null;
        try {
            if (!StringUtil.isEmpty(userId)) {
                valueUserId = Integer.valueOf(userId);
            }
            if (!StringUtil.isEmpty(valueId)) {
                valueId2 = Integer.valueOf(valueId);
            }

        } catch (NumberFormatException e) {
            // e.printStackTrace();
            return BaseRespVo.invalidParameter();
        }
        CommonData<MarketCollect> collectData = userService.collectList(basePageInfo, valueUserId, valueId2);
        return BaseRespVo.ok(collectData);
    }

    // TODO 会员足迹
    // 在页面获取用户足迹信息，查找用户足迹信息
    // list?page=1&limit=20&userId=1&goodsId=1152095&sort=add_time&order=desc
    @GetMapping("/footprint/list")
    public BaseRespVo getFootprintData(BasePageInfo basePageInfo, String userId, String goodsId) {
        Integer valueUserId = null;
        Integer valueGoodsId = null;
        try {
            if (!StringUtil.isEmpty(userId)) {
                valueUserId = Integer.valueOf(userId);

            }
            if (!StringUtil.isEmpty(goodsId)) {
                valueGoodsId = Integer.valueOf(goodsId);
            }
        } catch (NumberFormatException e) {
            // e.printStackTrace();
            return BaseRespVo.invalidParameter();
        }
        CommonData<MarketFootprint> footprintData = userService.footprintList(basePageInfo, valueUserId, valueGoodsId);
        return BaseRespVo.ok(footprintData);
    }

    // TODO 搜索历史
    // 在页面获取搜索历史记录，查找用户搜索历史记录信息
    // list?page=1&limit=20&userId=1&keyword=Java&sort=add_time&order=desc
    @GetMapping("/history/list")
    public BaseRespVo getHistoryData(BasePageInfo basePageInfo, String userId, String keyword) {
        Integer valueUserId = null;
        try {
            if (!StringUtil.isEmpty(userId)) {
                valueUserId = Integer.valueOf(userId);
            }
        } catch (NumberFormatException e) {
            // e.printStackTrace();
            return BaseRespVo.invalidParameter();
        }
        CommonData<MarketSearchHistory> searchHistoryData = userService.searchHistoryList(basePageInfo, valueUserId, keyword);
        return BaseRespVo.ok(searchHistoryData);
    }

    // TODO 意见反馈
    // 在页面获取意见反馈数据，根据用户名、反馈id查找反馈数据
    // list?page=1&limit=20&username=3&sort=add_time&order=desc&id=12
    @GetMapping("/feedback/list")
    public BaseRespVo getFeedbackData(BasePageInfo basePageInfo, String username, String id) {
        Integer valueId = null;
        try {
            if (!StringUtil.isEmpty(id)) {
                valueId = Integer.valueOf(id);
            }
        } catch (NumberFormatException e) {
            // e.printStackTrace();
            return BaseRespVo.invalidParameter();
        }
        CommonData<MarketFeedback> feedbackData = userService.feedbackList(basePageInfo, username, valueId);
        return BaseRespVo.ok(feedbackData);
    }
}
